package main

func main() {
	// 题目：给到一个s, 和一个数组，请你统计出，能组合的最少的连续的数，和大于等于s
	// 如下，应该是 4,3，所以输出答案是2

	s := 7
	nums := []int{2, 3, 1, 2, 4, 3}
	res := findMinArray(s, nums)
	print(res)
}

func findMinArray(s int, nums []int) int {
	// 思路： 使用滑动窗口，维护最少使用的元素个数变量，如果有更小的，则更新
	numsLen := len(nums)

	if numsLen == 0 {
		return 0
	}

	var minLen = 10000 // 待调整
	var currSum = 0

	left, right := 0, 0

	for right < numsLen {
		// 判定，如果
		currSum += nums[right]
		right++
		if currSum >= s { // 如果和大于s，说明符合条件，判定结论，然后left++
			minLen = minInt10(minLen, right-left)
			for left < right && currSum >= s { //
				currSum -= nums[left]
				left++
				if currSum >= s {
					minLen = minInt10(minLen, right-left)
				}
			}
		}
	}
	if minLen == 10000 {
		return 0
	}
	return minLen
}

func minInt10(int1, int2 int) int {
	if int1 > int2 {
		return int2
	}
	return int1
}
